/*
 * GPUC
 * 
 * Copyright © 2008 Attila T. Áfra <attila.afra@gmail.com>
 * 
 * This program is free software: you can redistribute it and/or modify it under the terms of the
 * GNU General Public License as published by the Free Software Foundation, either version 3 of the
 * License, or (at your option) any later version.
 * 
 * This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without
 * even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
 * General Public License for more details.
 * 
 * You should have received a copy of the GNU General Public License along with this program. If
 * not, see <http://www.gnu.org/licenses/>.
 */

#ifndef _GPUC_BUFFER_H
#define _GPUC_BUFFER_H

#include "Common.h"

/*------------------------------------------------------------------------------------------------*/

/// Buffer usage
typedef enum
{
    GPUC_BufferUsage_Upload,
    GPUC_BufferUsage_Download
}
GPUC_BufferUsage;

/*------------------------------------------------------------------------------------------------*/

/// Stream data buffer
typedef struct GPUC_Buffer_Object *GPUC_Buffer;

/*------------------------------------------------------------------------------------------------*/

GPUC_API GPUC_Buffer
GPUC_Buffer_create(size_t         size,
                   GPUC_BufferUsage usage);

GPUC_API void
GPUC_Buffer_destroy(GPUC_Buffer buffer);

GPUC_API void *
GPUC_Buffer_map(GPUC_Buffer buffer,
                GPUC_Access access);

GPUC_API void
GPUC_Buffer_unmap(GPUC_Buffer buffer);

GPUC_API size_t
GPUC_Buffer_getSize(GPUC_Buffer buffer);

/*------------------------------------------------------------------------------------------------*/

#endif // _GPUC_BUFFER_H
